home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / pcl / docs.lha / cmu-user / cmu-user.info-1 < prev    next >
Text File  |  1992-08-05  |  53KB  |  1,639 lines

  1. Info file: cmu-user.info,    -*-Text-*-
  2. produced by latexinfo-format-buffer
  3. from file: cmu-user.tex
  4.  
  5.  
  6. 
  7. File: cmu-user.info  Node: Top, Prev: (dir), Up: (dir), Next: Introduction
  8.  
  9.                      CMU Common Lisp User's Manual
  10.                       Robert A. MacLachlan, EDITOR
  11.                                     
  12.                        School of Computer Science
  13.                        Carnegie Mellon University
  14.                           Pittsburgh, PA 15213
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26. * Menu:
  27.  
  28. * Introduction::                
  29. * Design Choices and Extensions::  
  30. * The Debugger::                
  31. * The Compiler::                
  32. * Advanced Compiler Use and Efficiency Hints::  
  33. * UNIX Interface::              
  34. * Event Dispatching with SERVE-EVENT::  
  35. * Alien Objects::               
  36. * Interprocess Communication under LISP::  
  37. * Debugger Programmer's Interface::  
  38. * Function Index::              
  39. * Variable Index::              
  40. * Type Index::                  
  41. * Concept Index::               
  42.  
  43.  --- The Detailed Node Listing ---
  44.  
  45. Introduction
  46.  
  47. * Support::                     
  48. * Local Distribution of CMU Common Lisp::  
  49. * Net Distribution of CMU Common Lisp::  
  50. * Source Availability::         
  51. * Command Line Options::        
  52. * Credits::                     
  53.  
  54. Design Choices and Extensions
  55.  
  56. * Data Types::                  
  57. * Default Interrupts for Lisp::  
  58. * Packages::                    
  59. * The Editor::                  
  60. * Garbage Collection::          
  61. * Describe::                    
  62. * The Inspector::               
  63. * Load::                        
  64. * The Reader::                  
  65. * Running Programs from Lisp::  
  66. * Saving a Core Image::         
  67. * Search Lists::                
  68. * Time Parsing and Formatting::  
  69. * Lisp Library::                
  70.  
  71. Data Types
  72.  
  73. * Symbols::                     
  74. * Integers::                    
  75. * Floats::                      
  76. * Characters::                  
  77. * Array Initialization::        
  78.  
  79. Floats
  80.  
  81. * IEEE Special Values::         
  82. * Negative Zero::               
  83. * Denormalized Floats::         
  84. * Floating Point Exceptions::   
  85. * Floating Point Rounding Mode::  
  86. * Accessing the Floating Point Modes::  
  87.  
  88. The Inspector
  89.  
  90. * The Windowing Inspector::     
  91. * The TTY Inspector::           
  92.  
  93. Running Programs from Lisp
  94.  
  95. * Process Accessors::           
  96.  
  97. Search Lists
  98.  
  99. * Search List Example::         
  100.  
  101. The Debugger
  102.  
  103. * Debugger Introduction::       
  104. * The Command Loop::            
  105. * Stack Frames::                
  106. * Variable Access::             
  107. * Source Location Printing::    
  108. * Compiler Policy Control::     
  109. * Exiting Commands::            
  110. * Information Commands::        
  111. * Breakpoint Commands::
  112. * Function Tracing::            
  113. * Specials::                    
  114.  
  115. Stack Frames
  116.  
  117. * Stack Motion::                
  118. * How Arguments are Printed::   
  119. * Function Names::              
  120. * Funny Frames::                
  121. * Debug Tail Recursion::        
  122. * Unknown Locations and Interrupts::  
  123.  
  124. Variable Access
  125.  
  126. * Variable Value Availability::  
  127. * Note On Lexical Variable Access::  
  128.  
  129. Source Location Printing
  130.  
  131. * How the Source is Found::     
  132. * Source Location Availability::  
  133.  
  134. Breakpoint Commands
  135.  
  136. * Breakpoint Example::
  137.  
  138. Function Tracing
  139.  
  140. * Encapsulation Functions::     
  141.  
  142. The Compiler
  143.  
  144. * Compiler Introduction::       
  145. * Calling the Compiler::        
  146. * Compilation Units::           
  147. * Interpreting Error Messages::  
  148. * Types in Python::             
  149. * Getting Existing Programs to Run::  
  150. * Compiler Policy::             
  151. * Open Coding and Inline Expansion::  
  152.  
  153. Compilation Units
  154.  
  155. * Undefined Warnings::          
  156. * Context Declarations::        
  157. * Context Declaration Example::  
  158.  
  159. Interpreting Error Messages
  160.  
  161. * The Parts of the Error Message::  
  162. * The Original and Actual Source::  
  163. * The Processing Path::         
  164. * Error Severity::              
  165. * Errors During Macroexpansion::  
  166. * Read Errors::                 
  167. * Error Message Parameterization::  
  168.  
  169. Types in Python
  170.  
  171. * Compile Time Type Errors::    
  172. * Precise Type Checking::       
  173. * Weakened Type Checking::      
  174.  
  175. Compiler Policy
  176.  
  177. * The Optimize Declaration::    
  178. * The Optimize-Interface Declaration::  
  179.  
  180. Advanced Compiler Use and Efficiency Hints
  181.  
  182. * Advanced Compiler Introduction::  
  183. * More About Types in Python::  
  184. * Type Inference::              
  185. * Source Optimization::         
  186. * Tail Recursion::              
  187. * Local Call::                  
  188. * Block Compilation::           
  189. * Inline Expansion::            
  190. * Object Representation::       
  191. * Numbers::                     
  192. * General Efficiency Hints::    
  193. * Efficiency Notes::            
  194. * Profiling::                   
  195.  
  196. Advanced Compiler Introduction
  197.  
  198. * Types::                       
  199. * Optimization::                
  200. * Function Call::               
  201. * Representation of Objects::   
  202. * Writing Efficient Code::      
  203.  
  204. More About Types in Python
  205.  
  206. * More Types Meaningful::       
  207. * Canonicalization::            
  208. * Member Types::                
  209. * Union Types::                 
  210. * The Empty Type::              
  211. * Function Types::              
  212. * The Values Declaration::      
  213. * Structure Types::             
  214. * The Freeze-Type Declaration::  
  215. * Type Restrictions::           
  216. * Type Style Recommendations::  
  217.  
  218. Type Inference
  219.  
  220. * Variable Type Inference::     
  221. * Local Function Type Inference::  
  222. * Global Function Type Inference::  
  223. * Operation Specific Type Inference::  
  224. * Dynamic Type Inference::      
  225. * Type Check Optimization::     
  226.  
  227. Source Optimization
  228.  
  229. * Let Optimization::            
  230. * Constant Folding::            
  231. * Unused Expression Elimination::  
  232. * Control Optimization::        
  233. * Unreachable Code Deletion::   
  234. * Multiple Values Optimization::  
  235. * Source to Source Transformation::  
  236. * Style Recommendations::       
  237.  
  238. Tail Recursion
  239.  
  240. * Tail Recursion Exceptions::   
  241.  
  242. Local Call
  243.  
  244. * Self-Recursive Calls::        
  245. * Let Calls::                   
  246. * Closures::                    
  247. * Local Tail Recursion::        
  248. * Return Values::               
  249.  
  250. Block Compilation
  251.  
  252. * Block Compilation Semantics::  
  253. * Block Compilation Declarations::  
  254. * Compiler Arguments::          
  255. * Practical Difficulties::      
  256.  
  257. Inline Expansion
  258.  
  259. * Inline Expansion Recording::  
  260. * Semi-Inline Expansion::       
  261. * The Maybe-Inline Declaration::  
  262.  
  263. Object Representation
  264.  
  265. * Think Before You Use a List::  
  266. * Structures::                  
  267. * Arrays::                      
  268. * Vectors::                     
  269. * Bit-Vectors::                 
  270. * Hashtables::                  
  271.  
  272. Numbers
  273.  
  274. * Descriptors::                 
  275. * Non-Descriptor Representations::  
  276. * Variables::                   
  277. * Generic Arithmetic::          
  278. * Fixnums::                     
  279. * Word Integers::               
  280. * Floating Point Efficiency::   
  281. * Specialized Arrays::          
  282. * Interactions With Local Call::  
  283. * Representation of Characters::  
  284.  
  285. General Efficiency Hints
  286.  
  287. * Compile Your Code::           
  288. * Avoid Unnecessary Consing::   
  289. * Complex Argument Syntax::     
  290. * Mapping and Iteration::       
  291. * Trace Files and Disassembly::  
  292.  
  293. Efficiency Notes
  294.  
  295. * Type Uncertainty::            
  296. * Efficiency Notes and Type Checking::  
  297. * Representation Efficiency Notes::  
  298. * Verbosity Control::           
  299.  
  300. Profiling
  301.  
  302. * Profile Interface::           
  303. * Profiling Techniques::        
  304. * Nested or Recursive Calls::   
  305. * Clock resolution::            
  306. * Profiling overhead::          
  307. * Additional Timing Utilities::  
  308. * A Note on Timing::            
  309. * Benchmarking Techniques::     
  310.  
  311. UNIX Interface
  312.  
  313. * Reading the Command Line::    
  314. * Lisp Equivalents for C Routines::  
  315. * Type Translations::           
  316. * System Area Pointers::        
  317. * Unix System Calls::           
  318. * File Descriptor Streams::     
  319. * Making Sense of Mach Return Codes::  
  320. * Unix Interrupts::             
  321.  
  322. Unix Interrupts
  323.  
  324. * Changing Interrupt Handlers::  
  325. * Examples of Signal Handlers::  
  326.  
  327. Event Dispatching with SERVE-EVENT
  328.  
  329. * Object Sets::                 
  330. * The SERVE-EVENT Function::    
  331. * Using SERVE-EVENT with Unix File Descriptors::  
  332. * Using SERVE-EVENT with the CLX Interface to X::  
  333. * A SERVE-EVENT Example::       
  334.  
  335. Using SERVE-EVENT with the CLX Interface to X
  336.  
  337. * Without Object Sets::         
  338. * With Object Sets::            
  339.  
  340. A SERVE-EVENT Example
  341.  
  342. * Without Object Sets Example::  
  343. * With Object Sets Example::    
  344.  
  345. Alien Objects
  346.  
  347. * Introduction to Aliens::      
  348. * Alien Types::                 
  349. * Alien Operations::            
  350. * Alien Variables::             
  351. * Alien Data Structure Example::  
  352. * Loading Unix Object Files::   
  353. * Alien Function Calls::        
  354. * Step-by-Step Alien Example::  
  355.  
  356. Alien Types
  357.  
  358. * Defining Alien Types::        
  359. * Alien Types and Lisp Types::  
  360. * Alien Type Specifiers::       
  361. * The C-Call Package::          
  362.  
  363. Alien Operations
  364.  
  365. * Alien Access Operations::     
  366. * Alien Coercion Operations::   
  367. * Alien Dynamic Allocation::    
  368.  
  369. Alien Variables
  370.  
  371. * Local Alien Variables::       
  372. * External Alien Variables::    
  373.  
  374. Alien Function Calls
  375.  
  376. * alien-funcall::               The alien-funcall Primitive
  377. * def-alien-routine::           The def-alien-routine Macro
  378. * def-alien-routine Example::   
  379. * Calling Lisp from C::         
  380.  
  381. Interprocess Communication under LISP
  382.  
  383. * The REMOTE Package::          
  384. * The WIRE Package::            
  385. * Out-Of-Band Data::            
  386.  
  387. The REMOTE Package
  388.  
  389. * Connecting Servers and Clients::  
  390. * Remote Evaluations::          
  391. * Remote Objects::              
  392. * Host Addresses::              
  393.  
  394. The WIRE Package
  395.  
  396. * Untagged Data::               
  397. * Tagged Data::                 
  398. * Making Your Own Wires::       
  399.  
  400. Debugger Programmer's Interface
  401.  
  402. * DI Exceptional Conditions::   
  403. * Debug-variables::             
  404. * Frames::                      
  405. * Debug-functions::             
  406. * Debug-blocks::                
  407. * Breakpoints::                 
  408. * Code-locations::              
  409. * Debug-sources::               
  410. * Source Translation Utilities::  
  411.  
  412. DI Exceptional Conditions
  413.  
  414. * Debug-conditions::            
  415. * Debug-errors::                
  416.  
  417.  
  418. 
  419. File: cmu-user.info  Node: Introduction, Prev: Top, Up: Top, Next: Design Choices and Extensions
  420.  
  421. Introduction
  422. ************
  423.  
  424.  
  425. CMU Common Lisp is a public-domain implementation of Common Lisp
  426. developed in the Computer Science Department of Carnegie Mellon
  427. University.  CMU Common Lisp is currently supported on MIPS-processor
  428. DECstations, Sparc-based workstations from Sun and the IBM RT PC, and
  429. other ports are planned.  Currently, it runs under CMU's Mach operating
  430. system, OSF/1 or SunOS.  This document describes the implementation
  431. based on the Python compiler.  Previous versions of CMU Common Lisp ran
  432. on the IBM RT PC and (when known as Spice Lisp) on the Perq workstation.
  433. See `man cmucl' (`man/man1/cmucl.1') for other general information.
  434.  
  435. CMU Common Lisp sources and executables are freely available via
  436. anonymous FTP; this software is "as is", and has no warranty of any
  437. kind.  CMU and the authors assume no responsibility for the consequences
  438. of any use of this software.  See `doc/release-notes.txt' for a
  439. description of the state of the release you have.
  440.  
  441. * Menu:
  442.  
  443. * Support::                     
  444. * Local Distribution of CMU Common Lisp::  
  445. * Net Distribution of CMU Common Lisp::  
  446. * Source Availability::         
  447. * Command Line Options::        
  448. * Credits::                     
  449.  
  450.  
  451. 
  452. File: cmu-user.info  Node: Support, Prev: Introduction, Up: Introduction, Next: Local Distribution of CMU Common Lisp
  453.  
  454. Support
  455. =======
  456.  
  457.  
  458. The CMU Common Lisp project's goal is to develop a high quality public
  459. domain system, so we want your bug reports, bug fixes and enhancements.
  460. However, staff limitations prevent us from providing extensive support
  461. to people outside of CMU.  We are looking for university and industrial
  462. affiliates to help us with porting and maintenance for hardware and
  463. software that is not widely used at CMU.
  464.  
  465. This manual contains only implementation-specific information about CMU
  466. Common Lisp.  Users will also need a separate manual describing the CMU
  467. Common Lisp standard.  CMU Common Lisp was initially defined in Common
  468. Lisp: The Language, by Guy L.  Steele Jr.  CMU Common Lisp is now
  469. undergoing standardization by the X3J13 committee of ANSI.  The X3J13
  470. spec is not yet completed, but a number of clarifications and
  471. modification have been approved.  We intend that CMU Common Lisp will
  472. eventually adhere to the X3J13 spec, and we have already implemented
  473. many of the changes approved by X3J13.
  474.  
  475. Until the X3J13 standard is completed, the second edition of is probably
  476. the best available manual for the language and for our implementation of
  477. it.  This book has no official role in the standardization process, but
  478. it does include many of the changes adopted since the first edition was
  479. completed.
  480.  
  481. In addition to the language itself, this document describes a number of
  482. useful library modules that run in CMU Common Lisp. hemlock, an
  483. Emacs-like text editor, is included as an integral part of the CMU
  484. Common Lisp environment.  Two documents describe hemlock: the Hemlock
  485. User's Manual, and the Hemlock Command Implementor's Manual.
  486.  
  487. 
  488. File: cmu-user.info  Node: Local Distribution of CMU Common Lisp, Prev: Support, Up: Introduction, Next: Net Distribution of CMU Common Lisp
  489.  
  490. Local Distribution of CMU Common Lisp
  491. =====================================
  492.  
  493.  
  494. At CMU, you can get Common Lisp by running `modmisc':
  495.      
  496.          /usr/cs/etc/modmisc - cs.misc.cmucl
  497.  
  498.  
  499. This establishes `/usr/misc/.cmucl' as a symbolic link to the release area.
  500. In your `.login', add CMU CL to your path:
  501.      
  502.      setpath -i /usr/misc/.cmucl
  503.  
  504. Then run `lisp'.  Note that the first time you run Lisp, it will take
  505. AFS several minutes to copy the image into its local cache.  Subsequent
  506. starts will be much faster.
  507.  
  508. Or, you can run directly out of the AFS release area (which may be
  509. necessary on SunOS machines).  Put this in your `.login' shell
  510. script:
  511.      
  512.      setenv CMUCLLIB "/afs/cs/misc/cmucl/@sys/beta/lib"
  513.      setpath -i /afs/cs/misc/cmucl/@sys/beta
  514.  
  515.  
  516. After setting your path, ``man cmucl'' will give an introduction to CMU
  517. CL and `man lisp' will describe command line options.  For SunOS
  518. installation notes, see the `README' file in the SunOS release area.
  519.  
  520. See `/usr/misc/.cmucl/doc' for release notes and documentation.
  521. Hardcopy documentation is available in the document room.  Documentation
  522. supplements may be available for recent additions: see the `README'
  523. file.
  524.  
  525. Send bug reports and questions to `cmucl-bugs@cs.cmu.edu'.  If you send
  526. a bug report to `gripe' or `help', they will just forward it to this
  527. mailing list.
  528.  
  529. 
  530. File: cmu-user.info  Node: Net Distribution of CMU Common Lisp, Prev: Local Distribution of CMU Common Lisp, Up: Introduction, Next: Source Availability
  531.  
  532. Net Distribution of CMU Common Lisp
  533. ===================================
  534.  
  535.  
  536. Externally, CMU Common Lisp is only available via anonymous FTP.  We
  537. don't have the manpower to make tapes.  These are our distribution
  538. machines:
  539.      
  540.      lisp-rt1.slisp.cs.cmu.edu (128.2.217.9)
  541.      lisp-rt2.slisp.cs.cmu.edu (128.2.217.10)
  542.  
  543.  
  544. Log in with the user `anonymous' and `username@host' as password (i.e.
  545. your EMAIL address.)  When you log in, the current directory should be
  546. set to the CMU Common Lisp release area.  If you have any trouble with
  547. FTP access, please send mail to `slisp@cs.cmu.edu'.
  548.  
  549. The release area holds compressed tar files with names of the form:
  550.      
  551.      VERSION-MACHINE_OS.tar.Z
  552.  
  553. FTP compressed tar archives in binary mode.  To extract, `cd' to the
  554. directory that is to be the root of the tree, then type:
  555.      
  556.      uncompress <file.tar.Z | tar xf - .
  557.  
  558. The resulting tree is about 23 megabytes.  For installation directions,
  559. see the section "site initialization" in README file at the root of the
  560. tree.
  561.  
  562. If poor network connections make it difficult to transfer a 10 meg file,
  563. the release is also available split into five parts, with the suffix
  564. `.0' to `.4'. To extract from multiple files, use:
  565.      
  566.      cat file.tar.Z.* | uncompress | tar xf - .
  567.  
  568.  
  569. The release area also contains source distributions and other binary
  570. distributions.  A listing of the current contents of the release area is
  571. in `FILES'.  Major release announcements will be made to
  572. `comp.lang.lisp' until there is enough volume to warrant a
  573. `comp.lang.lisp.cmu'.
  574.  
  575. 
  576. File: cmu-user.info  Node: Source Availability, Prev: Net Distribution of CMU Common Lisp, Up: Introduction, Next: Command Line Options
  577.  
  578. Source Availability
  579. ===================
  580.  
  581.  
  582. Lisp and documentation sources are available via anonymous FTP ftp to
  583. any CMU CS machine.  All CMU written code is public domain, but CMU CL
  584. also makes use of two imported packages: PCL and CLX.  Although these
  585. packages are copyrighted, they may be freely distributed without any
  586. licensing agreement or fee.  See the `README' file in the binary
  587. distribution for up-to-date source pointers.
  588.  
  589. The release area contains a source distribution, which is an image of all the
  590. `.lisp' source files used to build a particular system VERSION:
  591.      
  592.      VERSION-source.tar.Z (3.6 meg)
  593.  
  594.  
  595. All of our files (including the release area) are actually in the AFS
  596. file system.  On the release machines, the FTP server's home is the
  597. release directory: `/afs/cs.cmu.edu/project/clisp/release'.  The actual
  598. working source areas are in other subdirectories of `clisp', and you can
  599. directly "cd" to those directories if you know the name.  Due to the way
  600. anonymous FTP access control is done, it is important to "cd" to the
  601. source directory with a single command, and then do a "get" operation.
  602.  
  603. 
  604. File: cmu-user.info  Node: Command Line Options, Prev: Source Availability, Up: Introduction, Next: Credits
  605.  
  606. Command Line Options
  607. ====================
  608.  
  609.  
  610. The command line syntax and environment is described in the lisp(1) man page in
  611. the man/man1 directory of the distribution.  See also cmucl(1).
  612. Currently Lisp accepts the following switches:
  613.      
  614. `-core'     
  615.       requires an argument that should be the name of a core file.
  616.      Rather than using the default core file
  617.      (`/usr/misc/.lisp/lib/lisp.core'), the specified core file is
  618.      loaded.
  619.      
  620. `-edit'     
  621.       specifies to enter Hemlock.  A file to edit may be specified by
  622.      placing the name of the file between the program name (usually
  623.      `lisp') and the first switch.
  624.      
  625. `-eval'     
  626.      
  627.      accepts one argument which should be a Lisp form to evaluate during
  628.      the start up sequence.  The value of the form will not be printed
  629.      unless it is wrapped in a form that does output.
  630.      
  631. `-hinit'     
  632.      
  633.      accepts an argument that should be the name of the hemlock init
  634.      file to load the first time the function ed is invoked.  The
  635.      default is to load `hemlock-init.OBJECT-TYPE', or if that does not
  636.      exist, `hemlock-init.lisp' from the user's home directory.  If the
  637.      file is not in the user's home directory, the full path must be
  638.      specified.
  639.      
  640. `-init'     
  641.       accepts an argument that should be the name of an init file to
  642.      load during the normal start up sequence.  The default is to load
  643.      `init.OBJECT-TYPE' or, if that does not exist, `init.lisp' from the
  644.      user's home directory.  If the file is not in the user's home
  645.      directory, the full path must be specified.
  646.      
  647. `-noinit'     
  648.      
  649.      accepts no arguments and specifies that an init file should not be
  650.      loaded during the normal start up sequence.  Also, this switch
  651.      suppresses the loading of a hemlock init file when Hemlock is
  652.      started up with the `-edit' switch.
  653.      
  654. `-load'     
  655.      
  656.      accepts an argument which should be the name of a file to load into
  657.      Lisp before entering Lisp's read-eval-print loop.
  658.      
  659. `-slave'     
  660.       specifies that Lisp should start up as a slave
  661.      Lisp and try to connect to an editor Lisp.  The name of the editor to
  662.      connect to must be specified -- to find the editor's name, use the
  663.      hemlock "`Accept Slave Connections'" command.  The name for
  664.      the editor Lisp is of the form:
  665.           
  666.           MACHINE-NAME`:'SOCKET
  667.      
  668.      where MACHINE-NAME is the internet host name for the machine and
  669.      SOCKET is the decimal number of the socket to connect to.
  670.  
  671. For more details on the use of the `-edit' and `-slave' switches, see
  672. the Hemlock User's Manual.
  673.  
  674. Arguments to the above switches can be specified in one of two ways:
  675. SWITCH`='VALUE or
  676. SWITCH<SPACE>VALUE.  For example, to start up the saved
  677. core file mylisp.core use either of the following two commands:
  678.      
  679.      `lisp -core=mylisp.core
  680.      lisp -core mylisp.core'
  681.  
  682.  
  683. 
  684. File: cmu-user.info  Node: Credits, Prev: Command Line Options, Up: Introduction
  685.  
  686. Credits
  687. =======
  688.  
  689.  
  690. Since 1981 many people have contributed to the development of CMU Common
  691. Lisp.  The currently active members are:
  692.      
  693.      David Axmark
  694.      Miles Bader
  695.      Ted Dunning
  696.      Scott Fahlman * (fearless leader)        
  697.      Mike Garland +
  698.      Paul Gleichauf *
  699.      Sean Hallgren +
  700.      Simon Leinen
  701.      William Lott *
  702.      Robert A. Maclachlan *
  703.      Tim Moore
  704.  
  705. Many people are voluntarily working on improving CMU Common Lisp.  "*"
  706. means a full-time CMU employee, and "+" means a part-time student
  707. employee.  A partial listing of significant past contributors follows:
  708.      
  709.      Rick Busdiecker
  710.      Bill Chiles *
  711.      Chris Hoover +
  712.      John Kolojejchick
  713.      Todd Kaufmann +
  714.      Dave McDonald *
  715.      Skef Wholey *
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723. 
  724. File: cmu-user.info  Node: Design Choices and Extensions, Prev: Introduction, Up: Top, Next: The Debugger
  725.  
  726. Design Choices and Extensions
  727. *****************************
  728.  
  729.  
  730. Several design choices in Common Lisp are left to the individual
  731. implementation, and some essential parts of the programming environment
  732. are left undefined.  This chapter discusses the most important design
  733. choices and extensions.
  734.  
  735. * Menu:
  736.  
  737. * Data Types::                  
  738. * Default Interrupts for Lisp::  
  739. * Packages::                    
  740. * The Editor::                  
  741. * Garbage Collection::          
  742. * Describe::                    
  743. * The Inspector::               
  744. * Load::                        
  745. * The Reader::                  
  746. * Running Programs from Lisp::  
  747. * Saving a Core Image::         
  748. * Search Lists::                
  749. * Time Parsing and Formatting::  
  750. * Lisp Library::                
  751.  
  752.  
  753. 
  754. File: cmu-user.info  Node: Data Types, Prev: Design Choices and Extensions, Up: Design Choices and Extensions, Next: Default Interrupts for Lisp
  755.  
  756. Data Types
  757. ==========
  758.  
  759.  
  760. * Menu:
  761.  
  762. * Symbols::                     
  763. * Integers::                    
  764. * Floats::                      
  765. * Characters::                  
  766. * Array Initialization::        
  767.  
  768.  
  769. 
  770. File: cmu-user.info  Node: Symbols, Prev: Data Types, Up: Data Types, Next: Integers
  771.  
  772. Symbols
  773. -------
  774.  
  775.  
  776. As in i{Common Lisp: The Language}, all symbols and package names are
  777. printed in lower case, as a user is likely to type them.  Internally,
  778. they are normally stored upper case only.
  779.  
  780. 
  781. File: cmu-user.info  Node: Integers, Prev: Symbols, Up: Data Types, Next: Floats
  782.  
  783. Integers
  784. --------
  785.  
  786.  
  787. The fixnum type is equivalent to `(signed-byte 30)'.  Integers outside
  788. this range are represented as a bignum or a word integer (?.)  Almost
  789. all integers that appear in programs can be represented as a `fixnum',
  790. so integer number consing is rare.
  791.  
  792. 
  793. File: cmu-user.info  Node: Floats, Prev: Integers, Up: Data Types, Next: Characters
  794.  
  795. Floats
  796. ------
  797.  
  798.  
  799. CMU Common Lisp supports two floating point formats: single-float and
  800. double-float.  These are implemented with IEEE single and double float
  801. arithmetic, respectively.  `short-float' is a synonym for
  802. `single-float', and `long-float' is a synonym for `double-float'.  The
  803. initial value of read-default-float-format is `single-float'.
  804.  
  805. Both `single-float' and `double-float' are represented with a pointer
  806. descriptor, so float operations can cause number consing.  Number consing is
  807. greatly reduced if programs are written to allow the use of non-descriptor
  808. representations (?.)
  809.  
  810.  
  811. * Menu:
  812.  
  813. * IEEE Special Values::         
  814. * Negative Zero::               
  815. * Denormalized Floats::         
  816. * Floating Point Exceptions::   
  817. * Floating Point Rounding Mode::  
  818. * Accessing the Floating Point Modes::  
  819.  
  820.  
  821. 
  822. File: cmu-user.info  Node: IEEE Special Values, Prev: Floats, Up: Floats, Next: Negative Zero
  823.  
  824. IEEE Special Values
  825. ...................
  826.  
  827.  
  828. CMU Common Lisp supports the IEEE infinity and NaN special values.
  829. These non-numeric values will only be generated when trapping is
  830. disabled for some floating point exception (?), so users of the default
  831. configuration need not concern themselves with special values.
  832.  
  833.  
  834.  -- Constant: short-float-positive-infinity
  835.  -- Constant: short-float-negative-infinity
  836.  -- Constant: single-float-positive-infinity
  837.  -- Constant: single-float-negative-infinity
  838.  -- Constant: double-float-positive-infinity
  839.  -- Constant: double-float-negative-infinity
  840.  -- Constant: long-float-positive-infinity
  841.  -- Constant: long-float-negative-infinity
  842.      The values of these constants are the IEEE positive and negative
  843.      infinity objects for each float format.
  844.  
  845.  
  846.  
  847.  -- Function: float-infinity-p
  848.      This function returns true if X is an IEEE float infinity (of
  849.      either sign.)  X must be a float.
  850.  
  851.  
  852.  
  853.  -- Function: float-nan-p
  854.  -- Function: float-trapping-nan-p
  855.      `float-nan-p' returns true if X is an IEEE NaN (Not A Number)
  856.      object.  `float-trapping-nan-p' returns true only if X is a
  857.      trapping NaN.  With either function, X must be a float.
  858.  
  859.  
  860. 
  861. File: cmu-user.info  Node: Negative Zero, Prev: IEEE Special Values, Up: Floats, Next: Denormalized Floats
  862.  
  863. Negative Zero
  864. .............
  865.  
  866.  
  867. The IEEE float format provides for distinct positive and negative zeros.
  868. To test the sign on zero (or any other float), use the CMU Common Lisp
  869. float-sign function.  Negative zero prints as `-0.0f0' or `-0.0d0'.
  870.  
  871. 
  872. File: cmu-user.info  Node: Denormalized Floats, Prev: Negative Zero, Up: Floats, Next: Floating Point Exceptions
  873.  
  874. Denormalized Floats
  875. ...................
  876.  
  877.  
  878. CMU Common Lisp supports IEEE denormalized floats.  Denormalized floats
  879. provide a mechanism for gradual underflow.  The CMU Common Lisp
  880. float-precision function returns the actual precision of a denormalized
  881. float, which will be less than float-digits.  Note that in order to
  882. generate (or even print) denormalized floats, trapping must be disabled
  883. for the underflow exception (?.)  The CMU Common Lisp
  884. `least-positive-'FORMAT-`float' constants are denormalized.
  885.  
  886.  
  887.  -- Function: float-normalized-p
  888.      This function returns true if X is a denormalized float.  X must be
  889.      a float.
  890.  
  891.  
  892. 
  893. File: cmu-user.info  Node: Floating Point Exceptions, Prev: Denormalized Floats, Up: Floats, Next: Floating Point Rounding Mode
  894.  
  895. Floating Point Exceptions
  896. .........................
  897.  
  898.  
  899. The IEEE floating point standard defines several exceptions that occur when the
  900. result of a floating point operation is unclear or undesirable.  Exceptions can
  901. be ignored, in which case some default action is taken, such as returning a
  902. special value.  When trapping is enabled for an exception, a error is signalled
  903. whenever that exception occurs.  These are the possible floating point
  904. exceptions:
  905.      
  906. :underflow     
  907.       This exception occurs when the result of an operation is too small
  908.      to be represented as a normalized float in its format.  If trapping
  909.      is enabled, the floating-point-underflow condition is signalled.
  910.      Otherwise, the operation results in a denormalized float or zero.
  911.      
  912. :overflow     
  913.       This exception occurs when the result of an operation is too large
  914.      to be represented as a float in its format.  If trapping is
  915.      enabled, the floating-point-overflow exception is signalled.
  916.      Otherwise, the operation results in the appropriate infinity.
  917.      
  918. :inexact     
  919.      
  920.      This exception occurs when the result of a floating point operation
  921.      is not exact, i.e. the result was rounded.  If trapping is enabled,
  922.      the `extensions:floating-point-inexact' condition is signalled.
  923.      Otherwise, the rounded result is returned.
  924.      
  925. :invalid     
  926.      
  927.      This exception occurs when the result of an operation is
  928.      ill-defined, such as `(/ 0.0 0.0)'.  If trapping is enabled, the
  929.      `extensions:floating-point-invalid' condition is signalled.
  930.      Otherwise, a quiet NaN is returned.
  931.      
  932. :divide-by-zero     
  933.      
  934.      This exception occurs when a float is divided by zero.  If trapping
  935.      is enabled, the divide-by-zero condition is signalled.  Otherwise,
  936.      the appropriate infinity is returned.
  937.  
  938.  
  939. 
  940. File: cmu-user.info  Node: Floating Point Rounding Mode, Prev: Floating Point Exceptions, Up: Floats, Next: Accessing the Floating Point Modes
  941.  
  942. Floating Point Rounding Mode
  943. ............................
  944.  
  945.  
  946. IEEE floating point specifies four possible rounding modes:
  947.      
  948. :nearest     
  949.       In this mode, the inexact results are rounded to the nearer of the
  950.      two possible result values.  If the neither possibility is nearer,
  951.      then the even alternative is chosen.  This form of rounding is also
  952.      called "round to even", and is the form of rounding specified for
  953.      the CMU Common Lisp round function.
  954.      
  955. :positive-infinity     
  956.       This mode rounds inexact results to the possible value closer to
  957.      positive infinity.  This is analogous to the CMU Common Lisp
  958.      ceiling function.
  959.      
  960. :negative-infinity     
  961.       This mode rounds inexact results to the possible value closer to
  962.      negative infinity.  This is analogous to the CMU Common Lisp floor
  963.      function.
  964.      
  965. :zero     
  966.      
  967.      This mode rounds inexact results to the possible value closer to
  968.      zero.  This is analogous to the CMU Common Lisp truncate function.
  969.  
  970.  
  971. WARNING:
  972.  
  973. Although the rounding mode can be changed with
  974. `set-floating-point-modes', use of any value other than the default
  975. (:nearest) can cause unusual behavior, since it will affect rounding
  976. done by Common Lisp system code as well as rounding in user code.  In
  977. particular, the unary `round' function will stop doing round-to-nearest
  978. on floats, and instead do the selected form of rounding.
  979.  
  980. 
  981. File: cmu-user.info  Node: Accessing the Floating Point Modes, Prev: Floating Point Rounding Mode, Up: Floats
  982.  
  983. Accessing the Floating Point Modes
  984. ..................................
  985.  
  986.  
  987. These functions can be used to modify or read the floating point modes:
  988.  
  989.  
  990.  -- Function: set-floating-point-modes 
  991.        &keys :traps :rounding-mode
  992.              :fast-mode :accrued-exceptions
  993.              :current-exceptions
  994.  
  995.  -- Function: get-floating-point-modes
  996.      The keyword arguments to `set-floating-point-modes' set various modes
  997.      controlling how floating point arithmetic is done:
  998.           
  999.      :traps     
  1000.           
  1001.           A list of the exception conditions that should cause traps.
  1002.           Possible exceptions are :underflow, :overflow, :inexact,
  1003.           :invalid and :divide-by-zero.  Initially all traps except
  1004.           :inexact are enabled.  *Note Floating Point Exceptions::.
  1005.           
  1006.      :rounding-mode     
  1007.            The rounding mode to use when the result is not exact.
  1008.           Possible values are :nearest, :positive-infinity,
  1009.           :negative-infinity and :zero.  Initially, the rounding mode is
  1010.           :nearest.  See the warning in section *Note Floating Point
  1011.           Rounding Mode:: about use of other rounding modes.
  1012.           
  1013.      :current-exceptions, :accrued-exceptions     
  1014.           
  1015.           Lists of exception keywords used to set the exception flags.
  1016.           The CURRENT-EXCEPTIONS are the exceptions for the previous
  1017.           operation, so setting it is not very useful.  The
  1018.           ACCRUED-EXCEPTIONS are a cumulative record of the exceptions
  1019.           that occurred since the last time these flags were cleared.
  1020.           Specifying `()' will clear any accrued exceptions.
  1021.           
  1022.      :fast-mode     
  1023.           
  1024.           Set the hardware's "fast mode" flag, if any.  When set, IEEE
  1025.           conformance or debuggability may be impaired.  Some machines
  1026.           may not have this feature, in which case the value is always
  1027.           false.  No currently supported machines have a fast mode.
  1028.      
  1029.      If a keyword argument is not supplied, then the associated state is
  1030.      not changed.
  1031.      
  1032.      `get-floating-point-modes' returns a list representing the state of
  1033.      the floating point modes.  The list is in the same format as the
  1034.      keyword arguments to `set-floating-point-modes', so `apply' could
  1035.      be used with `set-floating-point-modes' to restore the modes in
  1036.      effect at the time of the call to `get-floating-point-modes'.
  1037.  
  1038.  
  1039.  
  1040. 
  1041. File: cmu-user.info  Node: Characters, Prev: Floats, Up: Data Types, Next: Array Initialization
  1042.  
  1043. Characters
  1044. ----------
  1045.  
  1046.  
  1047. CMU Common Lisp implements characters according to Common Lisp: the
  1048. Language II.  The main difference from the first version is that
  1049. character bits and font have been eliminated, and the names of the types
  1050. have been changed.  base-character is the new equivalent of the old
  1051. string-char.  In this implementation, all characters are base characters
  1052. (there are no extended characters.)  Character codes range between `0'
  1053. and `255', using the ASCII encoding.
  1054.  
  1055.  
  1056. 
  1057. File: cmu-user.info  Node: Array Initialization, Prev: Characters, Up: Data Types
  1058.  
  1059. Array Initialization
  1060. --------------------
  1061.  
  1062.  
  1063. If no `:initial-value' is specified, arrays are initialized to zero.
  1064.  
  1065.  
  1066. 
  1067. File: cmu-user.info  Node: Default Interrupts for Lisp, Prev: Data Types, Up: Design Choices and Extensions, Next: Packages
  1068.  
  1069. Default Interrupts for Lisp
  1070. ===========================
  1071.  
  1072.  
  1073. CMU Common Lisp has several interrupt handlers defined when it starts up,
  1074. as follows:
  1075.      
  1076. `SIGINT' (^c)     
  1077.      
  1078.      causes Lisp to enter a break loop.  This puts you into the debugger
  1079.      which allows you to look at the current state of the computation.
  1080.      If you proceed from the break loop, the computation will proceed
  1081.      from where it was interrupted.
  1082.      
  1083. `SIGQUIT' (^\\)     
  1084.      
  1085.      causes Lisp to do a throw to the top-level.  This causes the
  1086.      current computation to be aborted, and control returned to the
  1087.      top-level read-eval-print loop.
  1088.      
  1089. `SIGTSTP' (^z)     
  1090.      
  1091.      causes Lisp to suspend execution and return to the Unix shell.  If
  1092.      control is returned to Lisp, the computation will proceed from
  1093.      where it was interrupted.
  1094.      
  1095. `SIGILL', `SIGBUS', `SIGSEGV', and `SIGFPE'     
  1096.      
  1097.      cause Lisp to signal an error.
  1098.  
  1099. For keyboard interrupt signals, the standard interrupt character is in
  1100. parentheses.  Your `.login' may set up different interrupt characters.
  1101. When a signal is generated, there may be some delay before it is
  1102. processed since Lisp cannot be interrupted safely in an arbitrary place.
  1103. The computation will continue until a safe point is reached and then the
  1104. interrupt will be processed.  ? to define your own signal handlers.
  1105.  
  1106. 
  1107. File: cmu-user.info  Node: Packages, Prev: Default Interrupts for Lisp, Up: Design Choices and Extensions, Next: The Editor
  1108.  
  1109. Packages
  1110. ========
  1111.  
  1112.  
  1113. When CMU Common Lisp is first started up, the default package is the
  1114. `user' package.  The `user' package uses the
  1115. `common-lisp', `extensions', and
  1116. `pcl' packages.  The symbols exported from these three packages can be
  1117. referenced without package qualifiers.  This section describes packages which
  1118. have exported interfaces that may concern users.  The numerous internal
  1119. packages which implement parts of the system are not described here.  Package
  1120. nicknames are in parenthesis after the full name.  
  1121. `alien', `c-call'     
  1122.       Export the features of the Alien foreign
  1123.      data structure facility (?.)
  1124.      
  1125. `pcl'     
  1126.      
  1127.      This package contains PCL (Portable CommonLoops), which is a
  1128.      portable implementation of CLOS (the Common Lisp Object System.)
  1129.      This implements most (but not all) of the features in the CLOS
  1130.      chapter of .
  1131.      
  1132. `debug'     
  1133.       
  1134.      The `debug' package contains the command-line oriented debugger.
  1135.      It exports utility various functions and switches.
  1136.      
  1137. `debug-internals'     
  1138.       The `debug-internals' package exports the primitives used to write
  1139.      debuggers.  ?.
  1140.      
  1141. `extensions (ext)'     
  1142.      
  1143.      The `extensions' packages exports local extensions to Common Lisp
  1144.      that are documented in this manual.  Examples include the
  1145.      `save-lisp' function and time parsing.
  1146.      
  1147. `hemlock (ed)'     
  1148.      
  1149.      The `hemlock' package contains all the code to implement Hemlock
  1150.      commands.  The `hemlock' package currently exports no symbols.
  1151.      
  1152. `hemlock-internals (hi)'     
  1153.      
  1154.      The `hemlock-internals' package contains code that implements low
  1155.      level primitives and exports those symbols used to write Hemlock
  1156.      commands.
  1157.      
  1158. `keyword'     
  1159.      
  1160.      The `keyword' package contains keywords (e.g., :start).  All
  1161.      symbols in the `keyword' package are exported and evaluate to
  1162.      themselves (i.e., the value of the symbol is the symbol itself).
  1163.      
  1164. `profile'     
  1165.       The `profile' package exports a simple run-time profiling facility
  1166.      (?).
  1167.      
  1168. `common-lisp (cl lisp)'     
  1169.      
  1170.      The `common-lisp' package exports all the symbols defined by Common
  1171.      Lisp: the Language and only those symbols.  Strictly portable Lisp
  1172.      code will depend only on the symbols exported from the `lisp'
  1173.      package.
  1174.      
  1175. `unix', `mach'     
  1176.      
  1177.      These packages export system call interfaces to generic BSD Unix
  1178.      and Mach (?).
  1179.      
  1180. `system (sys)'     
  1181.      
  1182.      The `system' package contains functions and information necessary
  1183.      for system interfacing.  This package is used by the `lisp' package
  1184.      and exports several symbols that are necessary to interface to
  1185.      system code.
  1186.      
  1187. `common-lisp-user (user cl-user)'     
  1188.      
  1189.      The `common-lisp-user' package is the default package and is where
  1190.      a user's code and data is placed unless otherwise specified.  This
  1191.      package exports no symbols.
  1192.      
  1193. `xlib'     
  1194.      
  1195.      The `xlib' package contains the Common Lisp X interface (CLX) to
  1196.      the X11 protocol.  This is mostly Lisp code with a couple of
  1197.      functions that are defined in C to connect to the server.
  1198.      
  1199. `wire'     
  1200.       The `wire' package exports a remote procedure call facility (?).
  1201.  
  1202.  
  1203.  
  1204. 
  1205. File: cmu-user.info  Node: The Editor, Prev: Packages, Up: Design Choices and Extensions, Next: Garbage Collection
  1206.  
  1207. The Editor
  1208. ==========
  1209.  
  1210.  
  1211. The `ed' function invokes the Hemlock editor which is described in
  1212. Hemlock User's Manual and Hemlock Command Implementor's Manual.  Most
  1213. users at CMU prefer to use Hemlock's slave Common Lisp mechanism which
  1214. provides an interactive buffer for the `read-eval-print' loop and editor
  1215. commands for evaluating and compiling text from a buffer into the slave
  1216. Common Lisp.  Since the editor runs in the Common Lisp, using slaves
  1217. keeps users from trashing their editor by developing in the same Common
  1218. Lisp with Hemlock.
  1219.  
  1220.  
  1221. 
  1222. File: cmu-user.info  Node: Garbage Collection, Prev: The Editor, Up: Design Choices and Extensions, Next: Describe
  1223.  
  1224. Garbage Collection
  1225. ==================
  1226.  
  1227.  
  1228. CMU Common Lisp uses a stop-and-copy garbage collector that compacts the
  1229. items in dynamic space every time it runs.  Most users cause the system
  1230. to garbage collect (GC) frequently, long before space is exhausted.
  1231. With 16 or 24 megabytes of memory, causing GC's more frequently on less
  1232. garbage allows the system to GC without much (if any) paging.
  1233.  
  1234.  
  1235.  
  1236. The following functions invoke the garbage collector or control whether
  1237. automatic garbage collection is in effect:
  1238.  
  1239.  
  1240.  -- Function: gc
  1241.      This function runs the garbage collector.  If `ext:*gc-verbose*' is
  1242.      non-nil, then it invokes `ext:*gc-notify-before*' before GC'ing and
  1243.      `ext:*gc-notify-after*' afterwards.
  1244.  
  1245.  
  1246.  
  1247.  -- Function: gc-off
  1248.      This function inhibits automatic garbage collection.  After calling
  1249.      it, the system will not GC unless you call `ext:gc' or `ext:gc-on'.
  1250.  
  1251.  
  1252.  
  1253.  -- Function: gc-on
  1254.      This function reinstates automatic garbage collection.  If the
  1255.      system would have GC'ed while automatic GC was inhibited, then this
  1256.      will call `ext:gc'.
  1257.  
  1258.  
  1259.  
  1260. The following variables control the behavior of the garbage collector:
  1261.  
  1262.  
  1263.  
  1264.  -- Variable: *bytes-consed-between-gcs*
  1265.      CMU Common Lisp automatically GC's whenever the amount of memory
  1266.      allocated to dynamic objects exceeds the value of an internal
  1267.      variable.  After each GC, the system sets this internal variable to
  1268.      the amount of dynamic space in use at that point plus the value of
  1269.      the variable `ext:*bytes-consed-between-gcs*'.  The default value
  1270.      is 2000000.
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  -- Variable: *gc-verbose*
  1276.      This variable controls whether `ext:gc' invokes the functions in
  1277.      `ext:*gc-notify-before*' and `ext:*gc-notify-after*'.  If
  1278.      `*gc-verbose*' is nil, `ext:gc' foregoes printing any messages.
  1279.      The default value is `T'.
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  -- Variable: *gc-notify-before*
  1285.      This variable's value is a function that should notify the user that the system
  1286.      is about to GC.  It takes one argument, the amount of dynamic space in use
  1287.      before the GC measured in bytes.  The default value of this variable is a
  1288.      function that prints a message similar to the following:
  1289.           
  1290.           [GC threshold exceeded with 2,107,124 bytes in use.  Commencing GC.]
  1291.      
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  -- Variable: *gc-notify-after*
  1297.      This variable's value is a function that should notify the user when a GC
  1298.      finishes.  The function must take three arguments, the amount of dynamic spaced
  1299.      retained by the GC, the amount of dynamic space freed, and the new threshold
  1300.      which is the minimum amount of space in use before the next GC will occur.  All
  1301.      values are byte quantities.  The default value of this variable is a function
  1302.      that prints a message similar to the following:
  1303.           
  1304.           [GC completed with 25,680 bytes retained and 2,096,808 bytes freed.]
  1305.           [GC will next occur when at least 2,025,680 bytes are in use.]
  1306.      
  1307.  
  1308.  
  1309. Note that a garbage collection will not happen at exactly the new
  1310. threshold printed by the default `ext:*gc-notify-after*' function.  The
  1311. system periodically checks whether this threshold has been exceeded, and
  1312. only then does a garbage collection.
  1313.  
  1314.  
  1315.  
  1316.  -- Variable: *gc-inhibit-hook*
  1317.      This variable's value is either a function of one argument or nil.
  1318.      When the system has triggered an automatic GC, if this variable is
  1319.      a function, then the system calls the function with the amount of
  1320.      dynamic space currently in use (measured in bytes).  If the
  1321.      function returns nil, then the GC occurs; otherwise, the system
  1322.      inhibits automatic GC as if you had called `ext:gc-off'.  The
  1323.      writer of this hook is responsible for knowing when automatic GC
  1324.      has been turned off and for calling or providing a way to call
  1325.      `ext:gc-on'.  The default value of this variable is nil.
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  -- Variable: *before-gc-hooks*
  1331.  
  1332.  -- Variable: *after-gc-hooks*
  1333.      These variables' values are lists of functions to call before or
  1334.      after any GC occurs.  The system provides these purely for
  1335.      side-effect, and the functions take no arguments.
  1336.  
  1337.  
  1338.  
  1339. 
  1340. File: cmu-user.info  Node: Describe, Prev: Garbage Collection, Up: Design Choices and Extensions, Next: The Inspector
  1341.  
  1342. Describe
  1343. ========
  1344.  
  1345.  
  1346. In addition to the basic function described below, there are a number of
  1347. switches and other things that can be used to control `describe''s
  1348. behavior.
  1349.  
  1350.  
  1351.  -- Function: describe  OBJECT &optional STREAM
  1352.  
  1353.      The `describe' function prints useful information about OBJECT on
  1354.      STREAM, which defaults to `*standard-output*'.  For any object,
  1355.      `describe' will print out the type.  Then it prints other
  1356.      information based on the type of OBJECT.  The types which are
  1357.      presently handled are:
  1358.      
  1359.           
  1360.      hash-table     
  1361.           
  1362.           `describe' prints the number of entries currently in the hash
  1363.           table and the number of buckets currently allocated.
  1364.           
  1365.      function     
  1366.           
  1367.           `describe' prints a list of the function's name (if any) and
  1368.           its formal parameters.  If the name has function
  1369.           documentation, then it will be printed.  If the function is
  1370.           compiled, then the file where it is defined will be printed as
  1371.           well.
  1372.           
  1373.      fixnum     
  1374.           
  1375.           `describe' prints whether the integer is prime or not.
  1376.           
  1377.      symbol     
  1378.           
  1379.           The symbol's value, properties, and documentation are printed.
  1380.           If the symbol has a function definition, then the function is
  1381.           described.
  1382.      
  1383.      If there is anything interesting to be said about some component of
  1384.      the object, describe will invoke itself recursively to describe
  1385.      that object.  The level of recursion is indicated by indenting
  1386.      output.
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  -- Variable: *describe-level*
  1392.      The maximum level of recursive description allowed.  Initially two.
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  -- Variable: *describe-indentation*
  1398.      The number of spaces to indent for each level of recursive
  1399.      description, initially three.
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  -- Variable: *describe-print-level*
  1405.  
  1406.  -- Variable: *describe-print-length*
  1407.      The values of `*print-level*' and `*print-length*' during
  1408.      description.  Initially two and five.
  1409.  
  1410.  
  1411. 
  1412. File: cmu-user.info  Node: The Inspector, Prev: Describe, Up: Design Choices and Extensions, Next: Load
  1413.  
  1414. The Inspector
  1415. =============
  1416.  
  1417.  
  1418. CMU Common Lisp has both a graphical inspector that uses X windows and a
  1419. simple terminal-based inspector.
  1420.  
  1421.  
  1422.  -- Function: inspect  &optional OBJECT
  1423.  
  1424.      `Inspect' calls the inspector on the optional argument OBJECT.  If
  1425.      OBJECT is unsupplied, `inspect' immediately returns false.
  1426.      Otherwise, the behavior of inspect depends on whether Lisp is
  1427.      running under X.  When `inspect' is eventually exited, it returns
  1428.      some selected Lisp object.
  1429.  
  1430.  
  1431. * Menu:
  1432.  
  1433. * The Windowing Inspector::     
  1434. * The TTY Inspector::           
  1435.  
  1436.  
  1437. 
  1438. File: cmu-user.info  Node: The Windowing Inspector, Prev: The Inspector, Up: The Inspector, Next: The TTY Inspector
  1439.  
  1440. The Windowing Inspector
  1441. -----------------------
  1442.  
  1443.  
  1444. If X is available, `inspect' creates an X window and displays
  1445. OBJECT in the window.  While `inspect' is running and the
  1446. cursor is in the inspector's X window, mouse clicks and keyboard input
  1447. have the following meaning:
  1448.      
  1449. Left     
  1450.      
  1451.      When the left mouse button is clicked over a component object, that
  1452.      object will be inspected in the current inspector window.
  1453.      
  1454. Middle     
  1455.      
  1456.      When the middle mouse button is clicked over a component object,
  1457.      `inspect' is exited returning the component as the result.  All the
  1458.      new inspector windows are deleted.
  1459.      
  1460. Shift Middle     
  1461.      
  1462.      When the shift key is depressed and the middle mouse button is
  1463.      clicked over a component object, `inspect' exits and returns the
  1464.      component as the result.  All the inspector windows are left
  1465.      displayed on the screen.
  1466.      
  1467. Right     
  1468.      
  1469.      When the right mouse button is clicked over a component object,
  1470.      that object will be inspected in a new inspector window.
  1471.      
  1472. d, D     
  1473.      
  1474.      When either d or D is typed, the current window is deleted.  If
  1475.      there are no more windows, then `inspect' exits and returns the
  1476.      original OBJECT.
  1477.      
  1478. h, H, ?     
  1479.      
  1480.      When any of h, H, or ? are typed while in an inspector window, a
  1481.      new window with help information is displayed.
  1482.      
  1483. m, M     
  1484.      
  1485.      When either m or M is typed, a component object may be modified.
  1486.      The cursor changes to an arrow with an M beside it.  Clicking any
  1487.      mouse button while the mouse is over a component will select that
  1488.      component as the destination for modification.  If m was typed, the
  1489.      source object is also selected by the mouse which is indicated by
  1490.      an S beside the arrow in the cursor.  If M was typed, the source
  1491.      object will be prompted for on the *query-io* stream.  The source
  1492.      object replaces the destination object.  While choosing the
  1493.      destination or source with the mouse, the operation can be aborted
  1494.      by type q or Q.
  1495.      
  1496. q, Q     
  1497.      
  1498.      When either q or Q is typed, `inspect' exits and returns the
  1499.      original OBJECT.  All new inspector windows are deleted.
  1500.      
  1501. p, P     
  1502.      
  1503.      When either p or P is typed, `inspect' exits and returns the
  1504.      original OBJECT.  All the inspector windows are left on the screen.
  1505.      
  1506. r, R     
  1507.      
  1508.      When either r or R is typed, the current inspector display is
  1509.      recomputed.  This is necessary to maintain a consistent display for
  1510.      an object that may have changed since the display was originally
  1511.      computed.
  1512.      
  1513. u, U     
  1514.      
  1515.      When either u or U is typed, the object of which the current object
  1516.      is a component is displayed.  This is the inverse operation to
  1517.      clicking the left mouse button over a component object.  If the
  1518.      window is currently displaying the top level object, nothing
  1519.      changes.
  1520.  
  1521. When the cursor is over a component object, the object is highlighted
  1522. with a surrounding box.
  1523.  
  1524.  
  1525. 
  1526. File: cmu-user.info  Node: The TTY Inspector, Prev: The Windowing Inspector, Up: The Inspector
  1527.  
  1528. The TTY Inspector
  1529. -----------------
  1530.  
  1531.  
  1532. If X is unavailable, a terminal inspector is invoked.  The TTY inspector
  1533. is a crude interface to `describe' which allows objects to be
  1534. traversed and maintains a history.  This inspector prints information
  1535. about and object and a numbered list of the components of the object.
  1536. The command-line based interface is a normal
  1537. `read'--`eval'--`print' loop, but an integer N
  1538. descends into the N'th component of the current object, and
  1539. symbols with these special names are interpreted as commands:
  1540. U     
  1541.       Move back to the enclosing object.  As you descend into the
  1542.      components of an object, a stack of all the objects previously seen
  1543.      is kept.  This command pops you up one level of this stack.
  1544.      
  1545. Q, E     
  1546.       Return the current object from `inspect'.
  1547.      
  1548. R     
  1549.       Recompute object display, and print again.  Useful if the object
  1550.      may have changed.
  1551.      
  1552. D     
  1553.       Display again without recomputing.
  1554.      
  1555. H, ?     
  1556.       Show help message.
  1557.  
  1558.  
  1559. 
  1560. File: cmu-user.info  Node: Load, Prev: The Inspector, Up: Design Choices and Extensions, Next: The Reader
  1561.  
  1562. Load
  1563. ====
  1564.  
  1565.  
  1566.  
  1567.  -- Function: load FILENAME &keys :verbose :print :if-does-not-exist
  1568.                :if-source-newer :contents
  1569.  
  1570.      As in standard Common Lisp, this function loads a file containing
  1571.      source or object code into the running Lisp.  Several CMU
  1572.      extensions have been made to `load' to conveniently support a
  1573.      variety of program file organizations.  FILENAME may be a wildcard
  1574.      pathname such as `*.lisp', in which case all matching files are
  1575.      loaded.
  1576.      
  1577.      If FILENAME has a `pathname-type' (or extension), then that exact
  1578.      file is loaded.  If the file has no extension, then this tells `load' to
  1579.      use a heuristic to load the "right" file.  The
  1580.      `*load-source-types*' and `*load-object-types*' variables below are
  1581.      used to determine the default source and object file types.  If only the source
  1582.      or the object file exists (but not both), then that file is quietly loaded.
  1583.      Similarly, if both the source and object file exist, and the object file is
  1584.      newer than the source file, then the object file is loaded.
  1585.      The value of the IF-SOURCE-NEWER argument is used to determine what
  1586.      action to take when both the source and object files exist, but the object file
  1587.      is out of date:
  1588.      :load-object     
  1589.           
  1590.           The object file is loaded even though the source file is
  1591.           newer.
  1592.           
  1593.      :load-source     
  1594.           
  1595.           The source file is loaded instead of the older object file.
  1596.           
  1597.      :compile     
  1598.           
  1599.           The source file is compiled and then the new object file is
  1600.           loaded.
  1601.           
  1602.      :query     
  1603.           
  1604.           The user is asked a yes or no question to determine whether
  1605.           the source or object file is loaded.
  1606.      
  1607.      This argument defaults to the value of `ext:*load-if-source-newer*'
  1608.      (initially `:load-object'.)
  1609.      
  1610.      The CONTENTS argument can be used to override the heuristic (based
  1611.      on the file extension) that normally determines whether to load the
  1612.      file as a source file or an object file.  If non-null, this
  1613.      argument must be either `:source' or `:binary', which forces
  1614.      loading in source and binary mode, respectively. You really
  1615.      shouldn't ever need to use this argument.
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  -- Variable: *load-source-types*
  1621.  
  1622.  -- Variable: *load-object-types*
  1623.      These variables are lists of possible `pathname-type' values for
  1624.      source and object files to be passed to `load'.  These variables
  1625.      are only used when the file passed to `load' has no type; in this
  1626.      case, the possible source and object types are used to default the
  1627.      type in order to determine the names of the source and object
  1628.      files.
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  -- Variable: *load-if-source-newer*
  1634.      This variable determines the default value of the IF-SOURCE-NEWER
  1635.      argument to `load'.  Its initial value is `:load-object'.
  1636.  
  1637.  
  1638. 
  1639.